草庐IT

C++ unique_ptr 和映射

全部标签

c++ - 从 unique_ptr<char[]> 到 unique_ptr<const char[]>

移动unique_ptr的最佳成语是什么?到unique_ptr?用例:假设您在某个缓冲区中创建了一个C字符串。为确保在出现异常时进行正确清理,可以使用unique_ptr引用该缓冲区.构造字符串后,您可能希望将其移动到某个类成员,声明为unique_ptr。以避免进一步修改字符串。这是我迄今为止最好的:std::unique_ptrres;std::unique_ptrbuf(newchar[4]);buf[0]='f';buf[1]=buf[2]='o';buf[3]='\0';res=std::unique_ptr(const_cast(buf.release()));单纯的移动

c++ - 为什么 shared_ptr 签名与数组的 unique_ptr 不同?

std::unique_ptrp(newint[10]);//okstd::shared_ptrp(newint[10]);//Errorshared_ptrsp(newint[10],[](int*p){delete[]p;});//Ok,writingcustomdeleterfor//arraysinceshared_ptrwillcall//deletebydefault.与unique_ptr相比,数组的shared_ptr签名有什么不同的具体原因吗?如果两个api都遵循类似的签名,那就更简单了。 最佳答案 unique_

c++ - 在 VS2013 上测量 vector<unique_ptr> 的性能?

TL;DR是VS2013的优化器混淆了,还是我的测量有误,或者全局虚拟变量实际上是否需要可变才能使测试有效或____?免责声明:这主要是出于“学术”兴趣,我不认为我看到的差异会真正影响任何生产代码。简介:我最近的一些测量让我找到了thisquestion因为我发现std::vector>之间存在显着差异和boost::ptr_vector在VS2013上。(另见评论there)看来,对于我的特定测试用例,访问boost::ptr_vector中的元素比使用unique_ptrvector快50%!我的测试代码在这里:http://coliru.stacked-crooked.com/a

python - 具有与 Python 的过滤器和映射相同功能的 C++ 工具

我正在寻找map的C++类似物或filter来自Python编程语言。它们中的第一个对iterable的每个项目应用一些函数并返回结果列表,第二个从函数返回true的iterable的那些元素构造一个列表。我想在C++中使用类似的功能:将一些函数映射到容器以获得具有转换后数据(并且可能具有不同长度)的新容器;对容器使用某种条件过滤;Python的map和filter在C++中有没有很好的实现?在这个简短的示例中,我尝试使用boost::bind等工具来解决这个问题和std::for_each我面临着困难。std::vectorresult应包含所有字符串std::vectorraw该字

c++ - 为什么 std::shared_ptr 没有 operator->*?

为什么std::shared_ptr没有operator->*?使用可变模板似乎很容易实现。参见thispaper了解更多信息。编辑:这似乎是以下内容的潜在重复:Aboutshared_ptrandpointertomemberoperator`->*`and`std::bind` 最佳答案 这可以在C++14之后添加到std::shared_ptr而不是您链接的复杂代码:templateautooperator->*(Method&&method){return[t=get(),m=std::forward(method)](au

c++ - 一组 weak_ptr

代码如下:structlex_compare{booloperator()(constweak_ptr&lhs,constweak_ptr&rhs)const{return*lhs.lock(),lex_compare>intset;intset.insert(make_shared(1));cout(1))我想知道如何count/findweak_ptr存储在intset是否有更好的方法可以完成同样的工作? 最佳答案 您不能将临时shared_ptr插入弱指针集,因为从这个存储的弱指针指向已删除的内存的意义上讲,这是内存泄漏。in

c++ - 来自映射文件的 IO 与使用文件流的 IO

我正在开发一个需要处理大量数据(以GB为单位)的应用程序。我不需要在任何时刻一次获得所有数据。可以对数据进行分段,并且只在任何给定实例的一个部分上工作(并因此将其放入内存中)。我读到大多数需要操作大量数据的应用程序通常通过使用内存映射文件来实现。进一步阅读内存映射文件,我发现从内存映射文件读取/写入数据比普通文件IO更快,因为我们最终使用高度优化的页面文件算法来执行读写。以下是我的查询:使用内存映射文件(我计划使用boost::file_mapping并且我在Windows上工作)进行文件IO与使用文件流有何不同?与使用文件流(在传统硬盘7200rpm上)相比,内存映射文件的数据读/写

c++ - 如何正确地将所有权从原始指针移动到 std::unique_ptr?

我的做法是:classSomeClass{std::vector>myObjects;public:voidtakeOwnership(MyObject*nowItsReallyMyObject){myObjects.emplace_back(std::move(nowItsReallyMyObject));}};我做的每件事都正确吗?有没有更好的解决方案? 最佳答案 move是多余的。我自己,我会这样做:voidtakeOwnership(std::unique_ptrnowItsReallyMyObject){myObjects

c++ - shared_ptr<> 到数组自定义删除器(使用 make_shared)

是否可以对shared_ptr指向的数组使用make_shared和自定义删除器(下面是我尝试通过构造函数执行此操作的方式,但我不知道该怎么做可以通过使用make_shared来工作吗?intn=5;shared_ptra(newint[n],default_delete());我想让它看起来像与此类似的东西,但为int数组分配内存并具有自定义删除器。这可能吗?intn=5;shared_ptra;a=make_shared(); 最佳答案 不幸的是,目前无法使用std::make_shared指定自定义删除器,但是,如果需要,您可

c++ - 如何使用 lambda 作为 std::unique_ptr 的删除器?

检查以下设计的程序:#include#includetemplateusingUniPtr=std::unique_ptr>;int*alloc(){returnnewint;}UniPtrfunc(){autodealloc=[](int*p){deletep;};returnUniPtr{alloc(),dealloc};}intmain(){autop=func();return0;}来自std::functionconstructormanual,我认为构建std::function对象可能会抛出异常,即使这个比例很低:UniPtrfunc(){autodealloc=[](i